package ws;

import java.util.ArrayList;
import java.util.Collection;

import org.orm.PersistentException;
import org.orm.PersistentTransaction;

import SOAPVO.AlumnoSOAPVO;
import SOAPVO.AnotacionSOAPVO;

import com.google.gson.Gson;

public class AlumnoSOA {

	/**
	 * Busca un alumno por id y lo retorna como json.
	 * Si el id es nulo retorna 0, si no encuentra el alumno retorna 1
	 * y si ocurre una excepcion retorna 2
	 * 
	 * @param id
	 * @return
	 */
	public static String getById(int id) {
		String json = null;
		// Comprueba si la variable ingresada es nula
		if (id == 0) {
			// Retorna un 0, indicando que el dato ingresado es nulo
			json = "0";
		} else {
			try {
				orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
				Collection<AlumnoSOAPVO> colectionAlumnoSOAPVO = new ArrayList<AlumnoSOAPVO>();
				orm.Tan_alumno ormAlumnos;
				// Busca al alumno con esa id
				ormAlumnos = lDAOFactory.getTan_alumnoDAO()
						.loadTan_alumnoByQuery("al_id='" + id + "'", null);
				// Si no se encuentra el alumno, devuelve un 1, de lo contrario,
				// agrega al alumno a la coleccion y lo retorna
				if (ormAlumnos == null) {
					json = "1";
				} else {
					AlumnoSOAPVO alumno = AlumnoSOAPVO
							.crearAlumnoSOAPVO(ormAlumnos);
					colectionAlumnoSOAPVO.add(alumno);
					Gson gson = new Gson();
					json = gson.toJson(colectionAlumnoSOAPVO);
				}// fin guardando resultado
			} catch (PersistentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				// Retorna 2 indicando excepcion
				json = "2";
			}
		}
		return json;
	}

	/**
	 * Busca un alumno por rut y la retorna como json.
	 * Si el rut es nulo retorna 0, si no encuentra el alumno retorna 1
	 * y si ocurre una excepcion retorna 2
	 * 
	 * @param rut
	 * @return
	 */
	public static String getByRut(String rut) {
		String json = null;
		// Comprueba si la variable ingresada es nula
		if ((rut == null) || (rut.equals(""))) {
			// Retorna un 0, indicando que el dato ingresado es nulo
			json = "0";
		} else {
			try {
				orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
				Collection<AlumnoSOAPVO> colectionAlumnoSOAPVO = new ArrayList<AlumnoSOAPVO>();
				orm.Tan_alumno ormAlumno;
				// Busca al alumno con ese rut
				ormAlumno = lDAOFactory.getTan_alumnoDAO()
						.loadTan_alumnoByQuery("al_rut='" + rut + "'", null);
				// Si no se encuentra el alumno, devuelve un 1, de lo contrario,
				// agrega al alumno a la coleccion y lo retorna
				if (ormAlumno == null) {
					json = "1";
				} else {
					AlumnoSOAPVO alumno = AlumnoSOAPVO
							.crearAlumnoSOAPVO(ormAlumno);
					colectionAlumnoSOAPVO.add(alumno);
					Gson gson = new Gson();
					json = gson.toJson(colectionAlumnoSOAPVO);
				}// fin guardando resultado
			} catch (PersistentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				// Retorna 2 indicando excepcion
				json = "2";
			}
		}
		return json;
	}

	/**
	 * Busca los alumnos por nombre y los retorna como json.
	 * Si el nombre es nulo retorna 0, si no encuentra alumnos retorna 1
	 * y si ocurre una excepcion retorna 2
	 * 
	 * @param nombre
	 * @return
	 */
	public static String getByNombre(String nombre) {
		String json = null;
		// Comprueba si la variable ingresada es nula
		if ((nombre == null) || (nombre.equals(""))) {
			// Retorna un 0, indicando que el dato ingresado es nulo
			json = "0";
		} else {
			try {
				orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
				Collection<AlumnoSOAPVO> colectionAlumnoSOAPVO = new ArrayList<AlumnoSOAPVO>();
				orm.Tan_alumno[] ormAlumnos;
				// Busca todos los alumnos con ese nombre
				ormAlumnos = lDAOFactory.getTan_alumnoDAO()
						.listTan_alumnoByQuery("al_nombre='" + nombre + "'",
								null);
				// Si no se encuentran alumnos, devuelve un 1, de lo sontrario,
				// agrega los alumnos a la coleccion y lo retorna
				if (ormAlumnos.length == 0) {
					json = "1";
				} else {
					for (int i = 0; i < ormAlumnos.length; i++) {
						AlumnoSOAPVO alumno = AlumnoSOAPVO
								.crearAlumnoSOAPVO(ormAlumnos[i]);
						colectionAlumnoSOAPVO.add(alumno);
					}// fin guardando resultados
					Gson gson = new Gson();
					json = gson.toJson(colectionAlumnoSOAPVO);
				}
			} catch (PersistentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				// Retorna 2 indicando excepcion
				json = "2";
			}
		}
		return json;
	}

	/**
	 * Busca los alumnos por curso y los retorna como json.
	 * Si el id del curso es nulo retorna 0, si no encuentra alumnos retorna 1
	 * y si ocurre una excepcion retorna 2
	 * 
	 * @param cursoId
	 * @return
	 */
	public static String getByCurso(int cursoId) {
		String json = null;
		// Comprueba si la variable ingresada es nula
		if (cursoId == 0) {
			// Retorna un 0, indicando que el dato ingresado es nulo
			json = "0";
		} else {
			try {
				orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
				Collection<AlumnoSOAPVO> colectionAlumnoSOAPVO = new ArrayList<AlumnoSOAPVO>();
				orm.Tan_alumno[] ormAlumnos;
				// Busca todos los alumnos en el curso
				ormAlumnos = lDAOFactory.getTan_alumnoDAO()
						.listTan_alumnoByQuery(
								"tan_cursocur_id='" + cursoId + "'", null);
				// Si no se encuentran alumnos, devuelve un 1, de lo sontrario,
				// agrega los alumnos a la coleccion y lo retorna
				if (ormAlumnos.length == 0) {
					json = "1";
				} else {
					for (int i = 0; i < ormAlumnos.length; i++) {
						AlumnoSOAPVO alumno = AlumnoSOAPVO
								.crearAlumnoSOAPVO(ormAlumnos[i]);
						colectionAlumnoSOAPVO.add(alumno);
					}// fin guardando resultados
					Gson gson = new Gson();
					json = gson.toJson(colectionAlumnoSOAPVO);
				}
			} catch (PersistentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				// Retorna 2 indicando excepcion
				json = "2";
			}
		}
		return json;
	}

	/**
	 * Busca todos los alumnos y los retorna como json.
	 * Si no encuentra alumnos retorna 1
	 * y si ocurre una excepcion retorna 2
	 * 
	 * @return
	 */
	public static String getAll() {
		String json = null;
		orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
		Collection<AlumnoSOAPVO> coleccionAlumnoSOAPVO = new ArrayList<AlumnoSOAPVO>();
		orm.Tan_alumno[] ormAlumnos;
		try {
			ormAlumnos = lDAOFactory.getTan_alumnoDAO().listTan_alumnoByQuery(
					null, null);
			// busqueda de todos los registros existentes
			if (ormAlumnos.length == 0) {// si no se encontraron registros
				json = "1";
			} else {// si se encontraron registros
				for (int i = 0; i < ormAlumnos.length; i++) {
					AlumnoSOAPVO objeto = AlumnoSOAPVO
							.crearAlumnoSOAPVO(ormAlumnos[i]);
					coleccionAlumnoSOAPVO.add(objeto);
				}// fin guardando resultados
				Gson gson = new Gson();
				json = gson.toJson(coleccionAlumnoSOAPVO);
			}
		} catch (PersistentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			json = "2";
		}
		return json;
	}

}
